package com.atguigu.lease.model.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;


/**
 * @author spring
 */

public enum ItemType implements BaseEnum {

    APARTMENT(1, "公寓"),

    ROOM(2, "房间");

    /*
    Mybatis预置的`TypeHandler`可以处理常用的数据类型转换，
    例如`String`、`Integer`、`Date`等等，其中也包含枚举类型，
    但是枚举类型的默认转换规则是枚举对象实例（ItemType.APARTMENT）和实例名称（"APARTMENT"）相互映射。
    若想实现`code`属性到枚举对象实例的相互映射，需要自定义`TypeHandler`。

    不过MybatisPlus提供了一个[通用的处理枚举类型的TypeHandler]
    (https://baomidou.com/pages/8390a4/)。其使用十分简单，
    只需在`ItemType`枚举类的`code`属性上增加一个注解`@EnumValue`，
    Mybatis-Plus便可完成从`ItemType`对象到`code`属性之间的相互映射，具体配置如下。
     */

    @EnumValue
    @JsonValue
    private Integer code;
    private String name;

    /*
    HttpMessageConverter`依赖于Json序列化框架（默认使用Jackson）。
    其对枚举类型的默认处理规则也是枚举对象实例（ItemType.APARTMENT）
    和实例名称（"APARTMENT"）相互映射。不过其提供了一个注解`@JsonValue`，
    同样只需在`ItemType`枚举类的`code`属性上增加一个注解`@JsonValue`，
    Jackson便可完成从`ItemType`对象到`code`属性之间的互相映射。
    具体配置如下，详细信息可参考Jackson[官方文档]
    (https://fasterxml.github.io/jackson-annotations/javadoc/2.8/com/fasterxml/jackson/annotation/JsonValue.html)。
     */

    @Override
    public Integer getCode() {
        return this.code;
    }


    @Override
    public String getName() {
        return name;
    }

    ItemType(Integer code, String name) {
        this.code = code;
        this.name = name;
    }

}
